import {useState, useReducer, useEffect} from 'react'; import {useTranslation} from 'react-i18next'; import {useRouter} from 'next/router'; import Layout from '../../layouts/Default'; import Fab from '../../containers/Fab'; import CarColumns from '../../containers/CarColumns'; import NewCarDialog from '../../containers/NewCarDialog'; import AddToMyEventDialog from '../../containers/AddToMyEventDialog'; import Loading from '../../containers/Loading'; import EventBar from '../../containers/EventBar'; import useToastStore from '../../stores/useToastStore'; import { useEventQuery, useUpdateEventMutation, Event as EventType, } from '../../generated/graphql'; import useEventStore from '../../stores/useEventStore'; interface Props { eventId: string; } const Event = ({eventId}: Props) => { const {t} = useTranslation(); const addToast = useToastStore(s => s.addToast); const setEvent = useEventStore(s => s.setEvent); const eventUpdate = useEventStore(s => s.event); const setIsEditing = useEventStore(s => s.setIsEditing); const {data: {event} = {}, loading, error} = useEventQuery({ variables: {id: eventId}, }); const [updateEvent] = useUpdateEventMutation(); const [isAddToMyEvent, setIsAddToMyEvent] = useState(false); const [openNewCar, toggleNewCar] = useReducer(i => !i, false); useEffect(() => { if (event) setEvent(event as EventType); }, [event]); const onSave = async e => { try { const {id, ...data} = eventUpdate; delete data.__typename; delete data.cars; await updateEvent({variables: {id, eventUpdate: data}}); setIsEditing(false); } catch (error) { console.error(error); addToast(t('event.errors.cant_update')); } }; const onShare = async () => { if (!event) return null; // If navigator as share capability if (!!navigator.share) return await navigator.share({ title: `Caroster ${event.name}`, url: `${window.location.href}`, }); // Else copy URL in clipboard else if (!!navigator.clipboard) { await navigator.clipboard.writeText(window.location.href); addToast(t('event.actions.copied')); return true; } }; if (loading) return ; return ( setIsAddToMyEvent(false)} /> ); }; export default props => { const router = useRouter(); const {eventId} = router.query; if (!eventId) return null; return ; };